package cn.ware.house.interfaces.entity;

import cn.ware.house.interfaces.entity.goods.Product;

/**
 * 库存实体类，对应数据库中的`inventory`表，用于封装库存相关的信息。
 * 此实体类中关联了 `Product` 和 `Warehouse` 实体类，方便获取更全面的库存相关信息，
 * 不再只是简单存放关联表的编号，而是能直接获取关联表的详细内容。
 */

public class Inventory {
    /**
     * 库存记录编号，自增长的唯一标识，对应数据库表中的`inventory_id`字段。
     * 在数据库中作为自增长的整数类型，是每条库存记录的唯一标识符，便于数据库层面的操作及关联查询等。
     */
    private Integer inventoryId;
    /**
     * 关联的仓库实体对象，对应数据库中的 `warehouse` 表，通过该对象可以获取仓库的详细信息。
     */
    private Warehouse warehouse;
    /**
     * 关联的商品实体对象，对应数据库中的 `product` 表，借助该对象能知晓商品的各种属性详情。
     */
    private Product product;
    /**
     * 库存数量，记录当前商品在对应仓库的剩余数量，对应数据库表中的`stock_quantity`字段。
     * 以整数类型表示商品在仓库中的实际剩余数量，是库存管理中的关键数据。
     */
    private Integer stockQuantity;
    /**
     * 已下单但还在运输途中的数量，对应数据库表中的`in_transit_quantity`字段。
     * 记录了已经采购下单但尚未到达仓库的商品数量情况，用于更全面地掌握商品流动状态。
     */
    private Integer inTransitQuantity;
    /**
     * 为特定订单或用途预留的数量，对应数据库表中的`reserved_quantity`字段。
     * 表示为了满足后续特定业务需求（如已有订单预订等）而预留的商品数量。
     */
    private Integer reservedQuantity;

    public Integer getInventoryId() {
        return inventoryId;
    }

    public void setInventoryId(Integer inventoryId) {
        this.inventoryId = inventoryId;
    }

    public Warehouse getWarehouse() {
        return warehouse;
    }

    public void setWarehouse(Warehouse warehouse) {
        this.warehouse = warehouse;
    }

    public Product getProduct() {
        return product;
    }

    public void setProduct(Product product) {
        this.product = product;
    }

    public Integer getStockQuantity() {
        return stockQuantity;
    }

    public void setStockQuantity(Integer stockQuantity) {
        this.stockQuantity = stockQuantity;
    }

    public Integer getInTransitQuantity() {
        return inTransitQuantity;
    }

    public void setInTransitQuantity(Integer inTransitQuantity) {
        this.inTransitQuantity = inTransitQuantity;
    }

    public Integer getReservedQuantity() {
        return reservedQuantity;
    }

    public void setReservedQuantity(Integer reservedQuantity) {
        this.reservedQuantity = reservedQuantity;
    }

    @Override
    public String toString() {
        return "Inventory{" +
                "inventoryId=" + inventoryId +
                ", warehouse=" + warehouse +
                ", product=" + product +
                ", stockQuantity=" + stockQuantity +
                ", inTransitQuantity=" + inTransitQuantity +
                ", reservedQuantity=" + reservedQuantity +
                '}';
    }
}